<?php
class CategoryModel extends TaxonomyModel {
    protected $fields=array(
       'id','pid','rgt', 'lft', 'level', 'name', 'jump', 'keywords','describe','total',
       '_pk'=>'id',
       '_autoInc'=>true
    );

    protected $_auto=array(
        array('name','trim','ALL','function'),
        array('jump','processJump','ALL','callback')
    );

    protected $_validate=array(
        array('name','require','{%name_required}',1),
        array('id','/^[1-9]\d*$/','{%id_not_exist}')
    );

    private function getCategoryVo(){
        $categoryVo=$this->create();
        if(!$categoryVo){
            return false;
        }
        //检查父栏目是否存在
        $parentNode=$this->where('id='.$categoryVo['pid'])->find();
        if(!$parentNode){
            $this->error=L('parent_find_fail');
            return false;
        }
        //检查栏目名称唯一性
        if(false===$this->checkNodeExistedHierarchy($parentNode,$categoryVo)){
            $this->error=(L('name_used'));
            return false;
        }
        return array('categoryVo'=>$categoryVo,'parentNode'=>$parentNode);
    }
    /**
     * 添加栏目
     */
    public function addCategory(){
        $data=$this->getCategoryVo();
        if(false===$data){
            return false;
        }
        //保存节点
        $insertID=$this->insertNode($data['parentNode'],$data['categoryVo']);   //返回新的主键值
        if(false===$insertID){
            $this->error=L('save_fail');
            return false;
        }
        return $categoryVo;
    }

    public function updateCategory(){
        $data=$this->getCategoryVo();
        if(false===$data){
            return false;
        }
        $categoryVo=$data['categoryVo'];
        if(false===$this->save($categoryVo,'id='.$categoryVo['id'])){
            $this->error=L('update_fail');
            return false;
        }
        return $categoryVo;
    }

    /**
     * 对栏目分类进行处理，如果classify为列表，则要清除jump的数据 _auto处理
     */
    public function processJump(){
        return ('list'===$_POST['classify']) ? '' : trim($_POST['jump']);
    }
}
